package com.lala.dao;

import com.lala.entity.ClientOrder;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;
import java.util.Map;

/**
 * (ClientOrder)表数据库访问层
 *
 * @author lixu
 * @since 2020-03-24 09:38:29
 */
public interface ClientOrderDao {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    ClientOrder queryById(Integer id);

    /**
     * 查询指定行数据
     *
     * @param offset 查询起始位置
     * @param limit 查询条数
     * @return 对象列表
     */
    List<ClientOrder> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);


    /**
     * 通过实体作为筛选条件查询
     *
     * @param clientOrder 实例对象
     * @return 对象列表
     */
    List<ClientOrder> queryAll(ClientOrder clientOrder);

    /**
     * 新增数据
     *
     * @param clientOrder 实例对象
     * @return 影响行数
     */
    int save(ClientOrder clientOrder);

    /**
     * 修改数据
     *
     * @param clientOrder 实例对象
     * @return 影响行数
     */
    int update(ClientOrder clientOrder);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Integer id);

    /**
     * 通过用户ID数据
     *
     * @param clientId 用户ID
     * @return 订单
     */
    @Select("select * from client_order where client_id=#{clientId}")
    List<ClientOrder> selectByClientId(Integer clientId);

    @Select("select * from client_order where client_id=#{clientId} and status=#{status}")
    List<ClientOrder> getByClientIdAndStatus(@Param("clientId") Integer clientId,@Param("status") Integer status);
    //查询数据库得到预付金额
    @Select("select order_price from client_order co,order_details od where  co.order_detailsId=od.id and co.id=#{Id} ")
    double getDetailsPay(Integer id);
    //联合查询订单表和订单详情表
    @Select("select * from client_order co,order_details od where  co.order_detailsId=od.id and co.id=#{Id} ")
    Map getOrderAndDetils(Integer id);
    //查询所有订单
    @Select("select * from client_order")
    List<ClientOrder> selectAll();
    @Select("select * from client_order where  id=#{Id} ")
    ClientOrder getOrder(Integer id);
//根据订单编号查询
    @Select("select * from client_order where  order_number=#{orderNumber} ")
    ClientOrder getOrderByNumber(String orderNumber );
//改变订单状态
    @Update("update client_order set status=3 where id=#{id}")
    void  updateStatus(Integer id);
}